package main

func rotateV2(nums []int, k int) {
	copy(nums, append(nums[k:], nums[0:k]...))
}

func rotate(nums []int, k int) {
	// 方法1: 再拼接一个数组,然后截取固定长度
	// 方法2: 移动k轮元素
	// 方法3: 建一个新数组,然后按位置复制过来

	// 经验: 旋转一般带着反转
	if k <= 0 {
		return
	}

	cnt := 0
	length := len(nums)

	for start := 0; start < length && cnt < length; start++ {
		i, j := start, (start+k)%length

		temp := nums[i]
		for cnt < length {
			// 把j位置新值存进temp,同时把旧temp放入j位置
			temp, nums[j] = nums[j], temp
			cnt++
			j = (j + k) % length
			i = (i + k) % length

			if i == start {
				break
			}
		}
	}
}

func main() {

}
